'use strict';
const db = uniCloud.database();
const usersCollection = db.collection('users');

exports.main = async (event, context) => {
  const { action, data } = event;

  try {
    // 获取班级列表（从学生记录的 class_id）
    if (action === 'getClassList') {
      const res = await usersCollection
        .where({ role: 'student' })
        .field({ class_id: true })
        .get();
      const classSet = new Set(res.data.map((item) => item.class_id).filter(Boolean));
      return {
        code: 0,
        msg: '获取班级列表成功',
        data: Array.from(classSet).map((name) => ({
          value: name,
          label: name,
        })),
      };
    }

    // 添加用户
    if (action === 'add') {
      if (!data._id) {
        data._id = Date.now().toString();
      }

      const existingUser = await usersCollection
        .where({ username: data.username })
        .get();
      if (existingUser.data.length > 0) {
        return { code: -1, msg: '用户名已存在' };
      }

      // 处理 className（仅教师） 和 class_id（仅学生）
      if (data.role === 'teacher') {
        data.className = Array.isArray(data.className) ? data.className : [];
        data.class_id = '';
      } else if (data.role === 'student') {
        data.className = [];
        data.class_id = data.class_id || '';
      } else {
        data.className = [];
        data.class_id = '';
      }

      data.created_at = Date.now();

      const res = await usersCollection.add(data);
      return { code: 0, data: { _id: res.id } };
    }

    // 更新用户
    if (action === 'update') {
      if (!data._id) {
        return { code: -1, msg: '用户ID不能为空' };
      }

      const { _id, ...updateData } = data;

      // 处理 className（仅教师） 和 class_id（仅学生）
      if (updateData.role === 'teacher') {
        updateData.className = Array.isArray(updateData.className) ? updateData.className : [];
        updateData.class_id = '';
      } else if (updateData.role === 'student') {
        updateData.className = [];
        updateData.class_id = updateData.class_id || '';
      } else {
        updateData.className = [];
        updateData.class_id = '';
      }

      updateData.updated_at = Date.now();

      const res = await usersCollection.doc(_id).update(updateData);
      return { code: 0, data: res };
    }

    // 删除用户
    if (action === 'delete') {
      if (!data._id) {
        return { code: -1, msg: '用户ID不能为空' };
      }
      const res = await usersCollection.doc(data._id).remove();
      return { code: 0, data: res };
    }

    // 用户列表
    if (action === 'list') {
      const res = await usersCollection.get();
      return { code: 0, data: res.data };
    }

    return { code: -1, msg: '未知操作类型' };
  } catch (e) {
    console.error('管理用户错误:', e);
    return {
      code: -1,
      msg: e.code === 11000 ? '数据冲突，请检查唯一字段' : '管理用户失败',
    };
  }
};